#include <bits/stdc++.h>
#define endl '\n'
using namespace std;

const int TEST_CASES = 20;
random_device rd;
mt19937 gen(rd());

// 生成一个随机整型数
int randomInt(int min, int max) {
    return uniform_int_distribution<int>(min, max)(gen);
}

// 生成测试用例
void test(int testCase, ofstream& fout) {
    if (testCase == 1) {
        // 样例1: 题目给出的示例
        fout << "3 3\n";
        fout << "1 0 1\n";
        fout << "0 0 1\n";
        fout << "1 1 0\n";
        fout << "1 1 0\n";
        fout << "0 0 1\n";
        fout << "0 0 1\n";
    } else if (testCase == 2) {
        // 边界情况: 完全相同
        fout << "2 2\n";
        fout << "1 1\n";
        fout << "0 0\n";
        fout << "1 1\n";
        fout << "0 0\n";
    } else if (testCase == 3) {
        // 边界情况: 完全不同
        fout << "2 2\n";
        fout << "1 1\n";
        fout << "0 0\n";
        fout << "0 0\n";
        fout << "1 1\n";
    } else if (testCase == 4) {
        // 边界情况: 1x1图像
        fout << "1 1\n";
        fout << "1\n";
        fout << "0\n";
    } else if (testCase <= 8) {
        // 小规模数据
        int n = randomInt(1, 10);
        int m = randomInt(1, 10);
        fout << n << " " << m << "\n";
        
        // 生成第一幅图像
        for (int i = 0; i < n; i++) {
            for (int j = 0; j < m; j++) {
                fout << randomInt(0, 1);
                if (j < m - 1) fout << " ";
            }
            fout << "\n";
        }
        
        // 生成第二幅图像
        for (int i = 0; i < n; i++) {
            for (int j = 0; j < m; j++) {
                fout << randomInt(0, 1);
                if (j < m - 1) fout << " ";
            }
            fout << "\n";
        }
    } else if (testCase <= 12) {
        // 中等规模数据
        int n = randomInt(10, 50);
        int m = randomInt(10, 50);
        fout << n << " " << m << "\n";
        
        // 生成第一幅图像
        for (int i = 0; i < n; i++) {
            for (int j = 0; j < m; j++) {
                fout << randomInt(0, 1);
                if (j < m - 1) fout << " ";
            }
            fout << "\n";
        }
        
        // 生成第二幅图像
        for (int i = 0; i < n; i++) {
            for (int j = 0; j < m; j++) {
                fout << randomInt(0, 1);
                if (j < m - 1) fout << " ";
            }
            fout << "\n";
        }
    } else if (testCase <= 16) {
        // 大规模数据
        int n = randomInt(50, 100);
        int m = randomInt(50, 100);
        fout << n << " " << m << "\n";
        
        // 生成第一幅图像
        for (int i = 0; i < n; i++) {
            for (int j = 0; j < m; j++) {
                fout << randomInt(0, 1);
                if (j < m - 1) fout << " ";
            }
            fout << "\n";
        }
        
        // 生成第二幅图像
        for (int i = 0; i < n; i++) {
            for (int j = 0; j < m; j++) {
                fout << randomInt(0, 1);
                if (j < m - 1) fout << " ";
            }
            fout << "\n";
        }
    } else {
        // 边界数据: 极值
        int type = randomInt(1, 3);
        if (type == 1) {
            // 最大值情况
            fout << "100 100\n";
            
            // 生成第一幅图像
            for (int i = 0; i < 100; i++) {
                for (int j = 0; j < 100; j++) {
                    fout << randomInt(0, 1);
                    if (j < 99) fout << " ";
                }
                fout << "\n";
            }
            
            // 生成第二幅图像
            for (int i = 0; i < 100; i++) {
                for (int j = 0; j < 100; j++) {
                    fout << randomInt(0, 1);
                    if (j < 99) fout << " ";
                }
                fout << "\n";
            }
        } else if (type == 2) {
            // 相似度为0%：全0 vs 全1
            fout << "50 50\n";
            
            // 第一幅图像：全0
            for (int i = 0; i < 50; i++) {
                for (int j = 0; j < 50; j++) {
                    fout << "0";
                    if (j < 49) fout << " ";
                }
                fout << "\n";
            }
            
            // 第二幅图像：全1
            for (int i = 0; i < 50; i++) {
                for (int j = 0; j < 50; j++) {
                    fout << "1";
                    if (j < 49) fout << " ";
                }
                fout << "\n";
            }
        } else {
            // 相似度为100%：两幅图像完全相同
            fout << "50 50\n";
            
            // 先生成并保存图像内容（模拟相同）
            vector<vector<int>> img(50, vector<int>(50));
            for (int i = 0; i < 50; i++) {
                for (int j = 0; j < 50; j++) {
                    img[i][j] = randomInt(0, 1);
                    fout << img[i][j];
                    if (j < 49) fout << " ";
                }
                fout << "\n";
            }
            
            // 输出相同的图像
            for (int i = 0; i < 50; i++) {
                for (int j = 0; j < 50; j++) {
                    fout << img[i][j];
                    if (j < 49) fout << " ";
                }
                fout << "\n";
            }
        }
    }
}